package com.zm.oes.controller;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zm.oes.entity.ApiResult;
import com.zm.oes.entity.ExamManage;
import com.zm.oes.serviceimpl.ExamManageServiceImpl;
import com.zm.oes.util.ApiResultHandler;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
public class ExamManageController {

    @Autowired
    private ExamManageServiceImpl examManageService;

    @GetMapping("/exams")
    public ApiResult findAll(){
        //方法内部首先打印一条日志信息，说明正在执行不分页查询所有试卷的操作
        System.out.println("不分页查询所有试卷");
        //创建了一个 ApiResult 对象 apiResult，用于封装查询结果
        ApiResult apiResult;
        //调用 examManageService 的 findAll() 方法执行不分页查询所有试卷的操作
        //最后，通过调用 ApiResultHandler 的 buildApiResult 方法构建一个包含状态码、消息和查询结果的 ApiResult 对象，并将其返回
        apiResult = ApiResultHandler.buildApiResult(200, "请求成功！", examManageService.findAll());
        return apiResult;
    }

    @GetMapping("/exams/{page}/{size}")
    public ApiResult findAll(@PathVariable("page") Integer page, @PathVariable("size") Integer size){
        System.out.println("分页查询所有作业");
        //创建一个 Page 对象 examManage，用于封装分页信息，其中传入的参数是请求中的页码和每页大小
        ApiResult apiResult;//创建了一个 ApiResult 对象 apiResult，用于封装查询结果
        Page<ExamManage> examManage = new Page<>(page,size);
        //调用 examManageService 的 findAll(examManage) 方法执行分页查询所有试卷的操作，传入了分页信息
        //获取查询结果的分页数据对象 all，这个对象是一个 IPage 类型，包含了查询到的试卷信息以及分页相关的信息
        IPage<ExamManage> all = examManageService.findAll(examManage);
        //调用 ApiResultHandler 的 buildApiResult 方法构建一个包含状态码、消息和查询结果的 ApiResult 对象，并将其返回
        apiResult = ApiResultHandler.buildApiResult(200, "请求成功！", all);
        return apiResult;
    }

    @GetMapping("/exam/{examCode}")
    public ApiResult findById(@PathVariable("examCode") Integer examCode){
        System.out.println("根据ID查找");
        //调用 examManageService 的 findById(examCode) 方法根据试卷编号查找试卷信息，并将结果存储在 res 变量中
        ExamManage res = examManageService.findById(examCode);
        //判断查询结果是否为空，如果为空，则返回一个包含错误信息的 ApiResult 对象，状态码为 10000，消息为 "作业编号不存在"
        if(res == null) {
            return ApiResultHandler.buildApiResult(10000,"作业编号不存在",null);
        }
        //如果查询结果不为空，则返回一个包含查询到的试卷信息的 ApiResult 对象，状态码为 200，消息为 "请求成功！"
        return ApiResultHandler.buildApiResult(200,"请求成功！",res);
    }

    //指定要删除的考试的唯一标识码
    @DeleteMapping("/exam/{examCode}")
    public ApiResult deleteById(@PathVariable("examCode") Integer examCode){
        //调用了一个名为examManageService的服务（或者称之为业务逻辑层）的方法delete，并传入了考试唯一标识码examCode作为参数
        //该方法的目的是执行删除考试的操作，并返回一个表示操作结果的整数值
        int res = examManageService.delete(examCode);
        //
        return ApiResultHandler.buildApiResult(200,"删除成功",res);
    }

    @PutMapping("/exam")
    public ApiResult update(@RequestBody ExamManage exammanage){
        int res = examManageService.update(exammanage);
        System.out.print("更新操作执行---");
        return ApiResultHandler.buildApiResult(200,"更新成功",res);
    }

    @PostMapping("/exam")
    public ApiResult add(@RequestBody ExamManage exammanage){
        int res = examManageService.add(exammanage);
        if (res ==1) {
            return ApiResultHandler.buildApiResult(200, "添加成功", res);
        } else {
            return  ApiResultHandler.buildApiResult(400,"添加失败",res);
        }
    }

    @GetMapping("/examManagePaperId")
    public ApiResult findOnlyPaperId() {
        ExamManage res = examManageService.findOnlyPaperId();
        if (res != null) {
            return ApiResultHandler.buildApiResult(200,"请求成功",res);
        }
        return ApiResultHandler.buildApiResult(400,"请求失败",res);
    }
}
